var fs = require('fs')
var readline = require('readline');
var path = __dirname + '/../base';
var roverPath = __dirname + '/../rover';
var comn = require('../../algo/routes/comn');

var base = {};
var rover = [];


module.exports = {
    messageBase: function (client) {
        var rawFiles = fs.readdirSync(path)
        rawFiles.forEach(function (file) {
            readLine(file, client)
        })
    },
    messageRover: function (client) {
        var rawFiles = fs.readdirSync(roverPath)
        rawFiles.forEach(function (file) {
            readRoverLine(file, client)
        })
    }
}

var timeNum = {
    "$GNGGA": 1,
    "$PASHR": 4,
    "$PASHD": 2,
    "$PTNL": 2
}

function readLine(file, client) {
    var lines = []
    var myInterface = readline.createInterface({
        input: fs.createReadStream(path + '\\' + file)
    });
    myInterface.on('line', function (line) {
        var index = line.split(',');
        if (index.length > 3) {
            var id = file.substring(file.indexOf("_") + 1, file.indexOf("."));
            index.push(id);
            lines.push(index)
        }
    });
    myInterface.on('close', function () {
        var i = 0
        // for(var i =0;i<lines.length;i++){

        var setTime = setInterval(function () {
            if (lines[i][0].indexOf("GGA") !== -1) {
                // console.log(file+'-------'+lines[i][1]+'===='+lines[i][2])
                var pos = [getDegrees(lines[i][2]), getLongitude(lines[i][4]), Number(lines[i][9])+Number(lines[i][11]),
                    file.substring(file.indexOf("_") + 1, file.indexOf(".")), lines[i][1]];
                comn.pos2ecef(pos, [], function (data) {
                    console.log(data);
                    client.publish('/node', {
                        key: data.key,
                        data: data.pos
                    })
                })
            }
            i++;
            if (i === lines.length) {
                clearInterval(setTime)
            }
        }, 1000)
        // }

        // var i = 0
        // var mean;
        // var task = setInterval(function () {
        //     if (lines[i]) {
        //         console.log('send+++' + [i])
        //         if (i < 30 && lines[i][0].indexOf("GGA")!==-1) {
        //             mean = (Number(lines[i][2]) + Number(lines[i][4])) / 2;
        //         }else {
        //             mean = null;
        //         }
        //         client.publish('/node', {
        //             mean:mean,
        //             data: lines[i]
        //         })
        //     }
        //
        //     i++
        //     if (i == lines.length) {
        //         clearInterval(task)
        //     }
        // }, 1000)
    })
}

function getDegrees(data) {
    if(!data){
        return
    }
    var branch = Number(data.substring(0,2));
    var degree  =Number(data.substr(2));
    return (branch+degree/60)*Math.PI/180
}

function getLongitude(data) {
    if(!data){
        return
    }
    var branch = Number(data.substring(0,3));
    var degree  =Number(data.substr(3));
    return (branch+degree/60)*Math.PI/180
}

function readRoverLine(file, client) {
    var lines = [];
    var data = {}
    var timeList = []
    var l = 0;
    var set1 = setInterval(function () {
        for (var key in data[timeList[l]]) {
            var pos = []
            pos[0] = getDegrees(data[timeList[l]][key].pos[5])
            pos[1] = getLongitude(data[timeList[l]][key].pos[7])
            pos[2] = Number(data[timeList[l]][key].pos[9])
            pos[3] = key;
            pos[4] = timeList[l];
            comn.pos2ecef(pos, [], function (data) {
            })
        }
        l++;
        if(l===timeList.length){
            clearInterval(set1)
        }
    }, 1000);
    var myInterface = readline.createInterface({
        input: fs.createReadStream(roverPath + '\\' + file)
    });
    myInterface.on('line', function (line) {
        var index = line.split(',');
        if (index.length > 3) {
            var id = file.substring(file.indexOf("_") + 1, file.indexOf("."));
            lines.push(index)
        }
    });
    myInterface.on('close', function () {
            var time = {};
            var currentTime;

            // var data ={time:{ "a#1":{pos:[],avr:[]},"a#2":[]}}
            var key;
            for (var n = 0; n < lines.length; n++) {
                currentTime = lines[n][timeNum[lines[n][0]]];
                if (!data[currentTime]) {
                    data[currentTime] = {};
                    data[currentTime][file.substring(file.indexOf("_") + 1, file.indexOf("."))+"#1"] ={pos: [], avr: []};
                    data[currentTime][file.substring(file.indexOf("_") + 1, file.indexOf("."))+"#2"] ={pos: [], avr: []};
                    timeList.push(currentTime)
                }
                if (lines[n][4].indexOf("BEG*") !== -1) {
                    key = lines[n][1];
                    continue
                }
                if (lines[n][1] === ("POS")) {
                    data[currentTime][file.substring(file.indexOf("_") + 1, file.indexOf(".")) + key].pos = lines[n]
                    continue
                }
                if (lines[n][1] === ("AVR")) {
                    data[currentTime][file.substring(file.indexOf("_") + 1, file.indexOf(".")) + key].avr = lines[n]
                    continue
                }
                // if (timeList.length > 100) {
                //     delete  data[timeList[100]];
                //     timeList.pop()
                // }
            }


            // var n = 0;
            // var timer = setInterval(function () {
            //     currentTime = lines[n][timeNum[lines[n][0]]];
            //     if (!data[currentTime]) {
            //         data[currentTime] = {};
            //         data[currentTime][file.substring(file.indexOf("_") + 1, file.indexOf(".")) + "#1"] = {pos: [], avr: []};
            //         data[currentTime][file.substring(file.indexOf("_") + 1, file.indexOf(".")) + "#2"] = {pos: [], avr: []};
            //         timeList.unshift(currentTime)
            //     }
            //     if (lines[n][4].indexOf("BEG*") !== -1) {
            //         key = lines[n][1];
            //         // return n+1
            //     }
            //     if (lines[n][1] === ("POS")) {
            //         data[currentTime][file.substring(file.indexOf("_") + 1, file.indexOf(".")) + key].pos = lines[n]
            //         // return n+1
            //     }
            //     if (lines[n][1] === ("AVR")) {
            //         data[currentTime][file.substring(file.indexOf("_") + 1, file.indexOf(".")) + key].avr = lines[n]
            //         // return n+1
            //     }
            //     if (timeList.length > 100) {
            //         delete  data[timeList[100]];
            //         timeList.pop()
            //     }
            //     n++;
            //     if (n === lines.length) {
            //         clearInterval(timer)
            //     }
            // }, 100)


            // for (var key in time) {
            // var t = 0;
            // var times = Object.keys(time);
            //
            // var setTime = setInterval(function () {
            //     if (time[times[t]][0]) {
            //         var pos2 = [Number(time[times[t]][0][5]) / 100,
            //             Number(time[times[t]][0][7]) / 100,
            //             Number(time[times[t]][0][9]),
            //             file.substring(file.indexOf("_") + 1, file.indexOf(".")) +
            //             time[times[t]][0][time[times[t]][0].length - 1]]
            //         comn.pos2ecef(pos2, [], function (data) {
            //             client.publish('/node', {
            //                 mean: data.key,
            //                 data: data.pos
            //             })
            //         })
            //     }
            //     if (time[times[t]][1]) {
            //         var pos = [Number(time[times[t]][1][5]) / 100,
            //             Number(time[times[t]][1][7]) / 100,
            //             Number(time[times[t]][1][9]),
            //             file.substring(file.indexOf("_") + 1, file.indexOf(".")) +
            //             time[times[t]][1][time[times[t]][1].length - 1]]
            //         comn.pos2ecef(pos, [], function (data) {
            //             client.publish('/node', {
            //                 mean: data.key,
            //                 data: data.pos
            //             })
            //         })
            //     }
            //     t++;
            //     if (t === times.length) {
            //         clearInterval(setTime)
            //     }
            // }, 5000)


            // }
            //
            // var allTime = [];
            // for (var key in time){
            //     allTime.push(key);
            // }
            // var i = 0
            // var task = setInterval(function () {
            //     console.log('send===' + [i])
            //     if (allTime[i]) {
            //         client.publish('/node', {
            //             data: time[allTime[i]]
            //         })
            //     }
            //
            //     i++
            //     if (i == allTime.length) {
            //         clearInterval(task)
            //     }
            // }, 1000)
        }
    )
}